#pragma once
#include "..\Common\Global.h"

template <typename I,typename O>
class Combinator_List : public Combinator<I,O>
{
public:
	Combinator_List(Combinator_MemoryManager<I,O>* _MM) : Combinator<I,O>(_MM){}

	void Add(Combinator_Node<I,O>& _value)
	{
		value.Add(&_value);
	}

	virtual O Parser(I& input)
	{
		O Result(GetMM());
		for(int i=0;i<value.Size();i++)
			if(O Result = value[i]->Parser(input))
				return Result;
		return Result;
	}
protected:
	List<Combinator_Node<I,O>*> value;
};